//
//  UserData.cpp
//  beast_tamer
//
//  Created by bean on 13/2/6.
//
//

#include "UserData.h"
#include "MonsterData.h"
#include "TamerData.h"
static UserData *s_sharedUserData = NULL;
UserData* UserData::sharedUserData(void)
{
    if (!s_sharedUserData)
    {
        s_sharedUserData = new UserData();
    }
    return s_sharedUserData;
}
UserData::UserData(void)
{
    
}

bool UserData::init(void)
{
    
    return true;
}

UserData::~UserData(void)
{
    
}
/////////////////處理玩家身上的所有道具///////////////
bool UserData::addItem(int itemId, int slot)
{
    if (m_items != 0) return false;
    m_items[slot] = itemId;
    return true;
}
bool UserData::sellItem(int slot)
{
    if (m_items != 0) return false;
    m_items[slot] = 0;
    CCLOG("todo sell");
    this->setGold(this->getGold() + 50);
    return true;
}
int UserData::getItem(int slot)
{
    return m_items[slot];
}

/////////////////怪物的處理///////////////
//從怪物列表移除怪物
void UserData::removeMonsterFromMonsters(int slot)
{
    m_monsters->removeObjectAtIndex(slot);
}
//在怪物列表加一支怪物
void UserData::addMonsterToMonsters(MonsterData* monster)
{
    m_monsters->addObject(monster);
}
//在怪物列表取得怪物
MonsterData* UserData::getMonsterFromMonsters(int slot)
{
    return static_cast<MonsterData*>(m_monsters->objectAtIndex(slot));
}


//從裝備中的怪物列表移除怪物
void UserData::removeMonsterFromeEquipMonster(int slot)
{
    this->addMonsterToMonsters(m_equipMonsterts[slot]);
    m_equipMonsterts[slot] = NULL;
}
//在裝備中的怪物列表加入怪物
void UserData::addMonsterToEquipMonster(int MonsterSlot, int equipSlot)
{
    m_equipMonsterts[equipSlot] = this->getMonsterFromMonsters(MonsterSlot);
    this->removeMonsterFromMonsters(MonsterSlot);
}
//在裝備中的怪物列表取得怪物
MonsterData* UserData::getMonsterFromEquipMonsters(int slot)
{
    return m_equipMonsterts[slot];
}



//取得特別組合
int UserData::currentSpecialCombination(void)
{
    return 0;
}

//怪物裝備道具
void UserData::setMonsterEquipItem(int itemSlot, int equipMonsterSlotId, int MonsterItemSlotId)
{
    MonsterData* beEquipItemMonster = this->getMonsterFromMonsters(equipMonsterSlotId);
    int beRemoveItemId = beEquipItemMonster->getEquipItem(MonsterItemSlotId);
    int beEquipItemId = this->getItem(itemSlot);
    beEquipItemMonster->setEquipItem(beEquipItemId, MonsterItemSlotId);
    this->addItem(beRemoveItemId, itemSlot);
}
//移除怪物道具
void UserData::removeMonsterEquipItem(int itemSlot, int equipMonsterSlotId, int MonsterItemSlotId)
{
    MonsterData* beRemoveMonster = this->getMonsterFromMonsters(equipMonsterSlotId);
    int currentEquipItemId = beRemoveMonster->getEquipItem(MonsterItemSlotId);
    this->addItem(currentEquipItemId, itemSlot);
    beRemoveMonster->removeEquipItem(MonsterItemSlotId);
}
//怪物裝備技能
void UserData::setMonsterEquipSkill(int itemSlot, int equipMonsterSlotId, int MonsterSkillSlotId)
{
    MonsterData* beEquipSkillMonster = this->getMonsterFromMonsters(equipMonsterSlotId);
    int beRemoveSkillId = beEquipSkillMonster->getEquipEquipSkill(MonsterSkillSlotId);
    int beEquipSkillId = this->getItem(itemSlot);
    beEquipSkillMonster->setEquipEquipSkill(beEquipSkillId, MonsterSkillSlotId);
    this->addItem(beRemoveSkillId, itemSlot);
}
//移除怪物裝備技能
void UserData::removeMonsterEquipSkill(int itemSlot, int equipMonsterSlotId, int MonsterSkillSlotId)
{
    MonsterData* beRemoveMonster = this->getMonsterFromMonsters(equipMonsterSlotId);
    int currentEquipSkill = beRemoveMonster->getEquipEquipSkill(MonsterSkillSlotId);
    this->addItem(currentEquipSkill, itemSlot);
}

//取得怪物裝備列表中的某支怪物的Atk
int UserData::getMonsterAtk(int slot)
{
    MonsterData* Monster = this->getMonsterFromMonsters(slot);
    return m_tamer->getAtkBuf() + Monster->atk();
}
//取得怪物裝備列表中的某支怪物的Def
int UserData::getMonsterDef(int slot)
{
    MonsterData* Monster = this->getMonsterFromMonsters(slot);
    return m_tamer->getDefBuf() + Monster->def();
}
//取得怪物裝備列表中的某支怪物的HP
int UserData::getMonsterHp(int slot)
{
    MonsterData* Monster = this->getMonsterFromMonsters(slot);
    return m_tamer->getHpBuf() + Monster->hp();
}
//取得怪物裝備列表中的某支怪物的速度
int UserData::getMonsterSpeed(int slot)
{
    MonsterData* Monster = this->getMonsterFromMonsters(slot);
    return m_tamer->getSpeedBuf() + Monster->speed();
}
//取得怪物裝備列表中的某支怪物的攻速
int UserData::getMonsterAtkSpeed(int slot)
{
    MonsterData* Monster = this->getMonsterFromMonsters(slot);
    return m_tamer->getAtkSpeedBuf() + Monster->atkSpeed();
}


////////////////馴獸師的處理///////////////
//裝備馴獸師的技能
void UserData::setTamerEquipSkillId(int itemSlot, int tamer_slot)
{
    int beRemoveSkill = m_tamer->getEquipSkill(tamer_slot);
    int beEquipSkill = this->getItem(itemSlot);
    m_tamer->setEquipSkill(beEquipSkill, tamer_slot);
    m_items[itemSlot] = beRemoveSkill;
}
//移除馴獸師的技能
void UserData::removeTamerEquipSkill(int itemSlot, int tamer_slot)
{
    int beRemoveSkill = m_tamer->getEquipSkill(tamer_slot);
    m_tamer->removeEquipSkill(tamer_slot);
    m_items[itemSlot] = beRemoveSkill;
    
}
//取得馴獸師的技能
int UserData::getTamerEquipSkillId(int slot)
{
    return m_tamer->getEquipSkill(slot);
}
//馴獸師正在使用的技能
int UserData::currentTamerTitle(void)
{
    return m_tamer->getTitle();
}
///////////////錢///////////////
int UserData::getGold(void)
{
    return m_gold;
}
void UserData::setGold(int gold)
{
    m_gold = gold;
}
///////////////存檔
void UserData::saveAllData(void)
{
    CCLOG("未實作");
}